終於到了考試的日子,學生們紛紛按照座位表坐上屬於自己的位置,遵循白板上的說明檢測電腦環境之後,考試就開始了。
題目大部分是選擇題,只有少數程式實作題。
選擇題基本都是觀念問題,比如資料類別data class和類別class的差異,標準函式Scope Functions的回傳值和Context Object的表述,Lambda與內聯inline、noinline、crossinline的關係,尾遞迴和遞迴的差別,中斷迴圈的關鍵字。
實作題也不難。
有些是一些特別情境的程式,比如同名稱的函式繼承:請寫一個D類別,擴展interface A
和interface B
、和繼承abstract class C
,其中C的建構子沒有參數;並請覆寫printName()函式,使其功能為依照A、B、C順序呼叫三者各自的printName()。
有一些是簡單的數學題,比如:輸入長度大於零的自然數陣列,輸出最大和最小。
有一些在考古題裡看過,比如:用迴圈寫數字反轉。
詩憶有所準備,很快就寫好了答案。
class D : A, B, C() {
override fun printName() {
super<A>.printName()
super<B>.printName()
super<C>.printName()
}
}
fun getMinAndMax(ints : Array<Int>): Array<Int> {
var min = 0
var max = 0
ints.forEach {
if (min > it) {
min = it
}
if (max < it) {
max = it
}
}
return arrayOf(max, min)
}
fun inverterLoop(input: Int): Int {
var input2 = input
var tail = 0
while (input2 != 0) {
tail = tail * 10 + input2 % 10
input2 /= 10
}
return tail
}
寫好的同學們在上傳答案後陸陸續續離開教室,詩憶在其中算不上最快,但也不是墊底,現在她只想著趕快補充消耗的糖分。